// 题目链接：https://www.luogu.com.cn/problem/P1088

#include <iostream>

using namespace std;

const int N = 10010;

int n, m;
int res = -1; // 从火星人手指的排列顺序开始计数

int q[N];    // 保存方案
int mars[N]; // 保存火星人手指的排列顺序
bool st[N];  // 记录每个数字是否已经选过

void DFS(int pos)
{
    // 剪枝，如果已经得到改变后的火星人手指的排列顺序，则直接退出
    if (res >= m)
    {
        return;
    }

    if (pos > n)
    {
        ++res;
        if (res == m)
        { // 满足相加的结果，输出改变后的火星人手指的排列顺序
            for (int i = 1; i <= n; ++i)
            {
                printf("%d ", q[i]);
            }
            printf("\n");
        }
        return;
    }

    for (int i = 1; i <= n; ++i)
    {
        if (res == -1)
        { // 直接从火星人手指的排列顺序开始排，减少大量递归
            i = mars[pos];
        }

        if (!st[i])
        {
            st[i] = true;
            q[pos] = i;

            DFS(pos + 1);

            // 恢复现场
            q[pos] = 0;
            st[i] = false;
        }
    }
}

int main()
{
    scanf("%d %d", &n, &m);
    for (int i = 1; i <= n; ++i)
    {
        scanf("%d", &mars[i]);
    }

    DFS(1);

    return 0;
}